#ifndef __STEPMOTOR_H
#define __STEPMOTOR_H

#include "tim.h"

#define TM_M1 &htim2
#define TM_M2 &htim3
#define Channel TIM_CHANNEL_1

//#define Mot1F HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET)
//#define Mot1B HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET)

//#define Mot2F HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET)
//#define Mot2B HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET)

//#define Mot3F HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_SET)
//#define Mot3B HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_RESET)

//#define Mot4F HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET)
//#define Mot4B HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET)

//
#define MotStart1 HAL_TIM_PWM_Start(TM_M1,Channel);
#define MotStop1 HAL_TIM_PWM_Stop(TM_M1,Channel);
#define MotAngleStart1 HAL_TIM_PWM_Start_IT(TM_M1,Channel);
#define MotAngleStop1 HAL_TIM_PWM_Stop_IT(TM_M1,Channel);
#define MotFront1 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
#define MotBack1 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);

#define MotStart2 HAL_TIM_PWM_Start(TM_M2,Channel);
#define MotStop2 HAL_TIM_PWM_Stop(TM_M2,Channel);
#define MotAngleStart2 HAL_TIM_PWM_Start_IT(TM_M2,Channel);
#define MotAngleStop2 HAL_TIM_PWM_Stop_IT(TM_M2,Channel);
#define MotFront2 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
#define MotBack2 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);


#define subdivision 3200//细分值
#define perscaler 72//分频系数


#define MOTOR_HORIZONTAL_MOVE 1     //水平步进电机
#define MOTOR_VERTICAL_MOVE 2       //垂直步进电机

typedef struct MotorType_t
{
    uint8_t id; // 电机ID
    int32_t angle; // 实时角度
    int32_t realAngle; // 真实角度
    int32_t targetAngle; // 目标角度
    uint16_t speed; // 速度，越小越大
} MotorType_t; 


// MotorType_t Motor1;
// MotorType_t Motor2;

//void motor_front(int num,int16_t angle);
//void motor_back(int num);
//void motor_half_front(int num);
void moto_init(MotorType_t *motor, uint8_t id);
void moto_set_speed(float speed, MotorType_t motor);
void moto_set_angle(int32_t angle, MotorType_t motor);
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
#endif
